perm filename I.AMC[IP,SYS] blob sn#691678 filedate 1982-12-19 generic text, type T, neo UTF8
	Universal I - IMP SYSTEM PARAMETER FILE FOR 6.02 MONITOR - V1550/545
	SEARCH	F,S

	DEBUG==1		;DEBUGGING

;[96bit] edited in feb. 1980 by provan at cmu
;	 to handle 96 bit imp leaders

;(236)	changed into a universal file by provan at avsail

;HERE DEFINE NONSTANDARD PARAMETERS
; Local revision history

;(236)	8-jan-81, provan
;	edit type: enhancement
;	modules affected: I, ImpSer, NetCon
;	symptom: imp code is clumsy to compile.
;	diagnosis: I.mac is not a universal file.
;	cure: bring the imp code into the 1970's by making i.mac a universal.

; End of Local Revision History

;SOME DEFINITION DEFINITIONS:

DEFINE XXD(A,N,C)<
	A==N
	..XX==N>

DEFINE XXP(A,C)<
	A==<..XX==..XX+1>>

DEFINE XXS(A,C)<
	A==:<..XX==..XX+1>>

DEFINE XX(A,N,C)<
	IFNDEF A,<A==N>>

DEFINE XXX(A,C)<
	A==..XX>

DEFINE XXM(A,N,C)<
	A==..XX+1
	..XX==..XX+N>
;[96bit] define some bit, byte and word counts.

sall			;[96bit] avoid listing the repeat
radix 10		;[96bit] do this in base 10

.szimp==96		;[96bit] bits in the standard imp leader
.szncp==40		;[96bit] bits in the standard ncp leader
.szhst==24		;[96bit] bits in host field of imp leader
.szlnk==8		;[96bit] bits in link number (currently, first
			;	 8 bits of the "message id" field.)
.szpad==16		;[96bit] number of bits in the bytes of padding
			;	 allowed by the imp no-op code
PadMax==9		;[96bit] maximum number of pads allowed by no-op

;[96bit] initialize for computing the number of pad bytes we need
.pads==0		;[96bit] initialize pads needed to 0
;[96bit] compute <imp leader size> modulo <pdp-10 word size>
.scratch==<.szimp + .szncp> - <<<.szimp + .szncp>/36>*36>

repeat PadMax,<		;[96bit] add pads until satisfied
	ifn .scratch,<		; are there still some bits?
		.pads==.pads+1			; yes: add another pad
		.scratch==.scratch+.szpad	; and add the bits
		ifge .scratch-36,<		; another word crossed?
			.scratch==.scratch-36	; yes: cut back
			>
		>
	>
ifn .scratch,<printx cannot get to even word boundary with imp padding>

.wdimp==<.szimp+35>/36	;[96bit] words needed for the imp leader
.wdled==<.szimp + .szncp + <.pads * .szpad> + 35>/36
			;[96bit] words needed for the entire leader

;[96bit] define some masks used.
im.hsm==<1 ← .szhst> - 1	;[96bit] standard host mask
im.lnm==<1 ← .szlnk> - 1	;[96bit] standard link mask
im.hst==im.hsm ← .szlnk		;[96bit] standard host mask for DDB
im.lnk==im.lnm			;[96bit] standard link mask for DDB


radix 8		;[96bit] leave base 10
xall		;[96bit] resume listing repeats and macro expansions
;IMP DDB DEFINITIONS


;DEVIOS BITS(RIGHT HALF)
XX	IODATA,2000,		THERE IS DATA READY FOR INPUT
XX	IONRFM,1000,		NOT READY FOR NEXT MESSAGE
XX	IO.INS,400,		INS RECEIVED ON CONNECTION
XX	IO.INR,200,		INR RECEIVED ON CONNECTION

;(LEFT HALF)  BITS 13-17 STANDARD (40, 20,10, 4, 2, 1)
XX	IOBRKF,100,		BREAK CHAR SEEN IN ASCII

;IMP SPECIFIC STUFF
XXD	IMPCLR,DEVLSD+1,	WHERE TO START CLEARING

XXX	IMPIOS,			IMP NCP STATUS
	;LEFT HALF		COPIED IN DEVIOS LEFT HALF
	XX INCPWT,200,		INPUT NCP WAIT
	XX ONCPWT,400,		OUTPUT NCP WAIT
	XX OBITWT,2000,		ALLOCATION WAIT
	XX ORFMWT,4000,		OUTPUT RFNM WAIT
	XX IDATWT,10000,	INPUT DATA WAIT
	XX ALLWAT,16600,	ALL WAIT BITS
	;RIGHT HALF
	XX EXTBIT,1B35,		EXEC TIMEOUT BIT (FOR INCREMENTING)
	XX EXTOVF,100B35,	EXEC TIMEOUT OVERFLOW BIT
	XX EXTMSK,177B35,	EXEC TIMEOUT FIELD
	XX TIMFLG,1B28,		USER TIMEOUT FLAG
	XX EXCFLG,1B27,		MARKS AN EXEC SERVER TELNET SOCKET

XXP	IMPBYT,			(150) RESIDUAL BYTE COUNT (ASYNCH I/O)
XXP	IMPPTR,			(150) POINTER TO RESIDUAL BYTES

XXP	OCLEAR,			CLEAR FROM HERE WHEN WIPING OUTPUT
XXX 	OALBIT,			TRANSMIT BIT ALLOCATION
XXP	OALMES,			TRANSMIT MESSAGE ALLOCATION
XXP	OSKLCL,			MY TRANSMIT SOCKET
XXP	OSKRMT,			HIS RECEIVE SOCKET
XXP	OSTAT,<			TRANSMIT SOCKET STATE, FLAGS>
	;LEFT HALF
	XX TRCENB,1B0,		FLAG TO SEND TRACE BIT IN DATA MESSAGES
	define picpsk<picpsk::	point 7,ostat(f),7>
				;[96bit] icp socket number
	XX ORFNOV,40B17,	RFNM TIMEOUT FLAG (32 SECONDS)
	XX ORFMSK,177B17,	RFNM TIMEOUT CLOCK MASK
	;RIGHT HALF
	XX ORFNMW,1B18,		WAITING FOR A RFNM ON THE LINK
	XX BYTMSK,<<1←8-1>←<↑D35-↑D29>>,	BIT MASK FOR THE
				;  BYTE SIZE FIELD IN THE STATUS WORD
	DEFINE POBYTE<POBYTE::	POINT 8,OSTAT(F),29>
	XX STTMSK,↑O77,		MASK FOR THE STATE CODE
	DEFINE POSTAT<POSTAT::	POINT 6,OSTAT(F),35>
xxm	orfcq,3,		[96bit] rfc queue for transmit socket
	xx .rqhst,0,		[96bit] host word offset for rfc queue
	xx .rqlnk,1,		[96bit] link number word
	xx .rqsoc,2,		[96bit] socket number
XXP	OBFWD,			TOP OF AREA USED BY NCP OUTPUT
xxx	oleadr,			[96bit] contains host/link number
	DEFINE POHOST<POHOST::	POINT .szhst,OLEADR(F),35 - .szlnk>
	DEFINE POLINK<POLINK::	POINT .szlnk,OLEADR(F),35>
XXP	OBFBIT,			REMEMBERS BITS SENT FOR FLOW CONTROL
XXP	OBFLST,			ADDRESS OF LAST BUFFER IN OUTPUT STREAM
XXP	OBFFST,			ADDRESS OF FIRST BUFFER IN OUTPUT STREAM
XXP	OBFTHS,			ADDRESS OF BUFFER CURRENTLY BEING FILLED
XXP	OBFPC,			ADDRESS OF ROUTINE TO GET NEXT BYTE
XXP	OBFBC,			BYTE COUNT REMAINING IN BUFFER
XXP	OBFPNT,			ADDRESS OF LAST WORD FILLED IN BUFFER
XX	OBFWDS,..XX-OBFWD+1,	LENGTH OF OUTPUT DDB USED BY NCP
XXX	OCLEND,			STOP CLEARING HERE WHEN WIPING OUTPUT
XXP	OTTYC,			TEMPORARY TTY CHARACTER STORAGE
XXP	ITTYC,			TEMPORARY CHARACTER SAVE AREA FOR TTY LINK
REPEAT 0,<	;SOMEDAY, INTERRUPTS WILL ACTUALLY GET IMPLEMENTED
XXP	INTRPT,			DISPATCH ADDRESSES FOR INTERRUPTS
>
XXP	TTYLIN,			TTY FLAGS AND LDB ADDRESS
	XX TTYJOB,1B18,		IMP IS CONNECTED TO A TTY CONTROLLING A JOB
	XX TTYPTR,1B19,		TTY PRINTER IS ATTACHED
	XX TTYKBD,1B20,		TTY KEYBOARD IS ATTACHED
	XX TTYCRL,1B21,		LAST CHARACTER WAS CR
	XX TTYXWT,1B22,		JOB WAITING UNTIL CROSSPATCH BROKEN

;THE FOLLOWING ARE THE IMP REQUEST FLAGS, INDICATING WHAT CLOCK-LEVEL
;   SERVICES MUST BE PERFORMED FOR THIS DDB.
	XX IRTIIO,1B23,		TTY INPUT TO CROSSPATCHED IMP OUTPUT
	XX IRIITO,1B24,		IMP INPUT TO CROSSPATCHED TTY OUTPUT
	XX IRTOIO,1B25,		OUTPUT FROM IMP TTY TO IMP
	XX IRIITI,1B26,		INPUT FROM IMP TO TTY LINE

	XX TTYRQF,IRTIIO!IRIITO!IRTOIO!IRIITI, ALL TTY REQUEST FLAGS

	XX SYNTIM,17B27,	SYNCH TIMEOUT FIELD FOR TELNET
	DEFINE PSYNTM<PSYNTM::	POINT 4,TTYLIN(F),11>
	XX SYNTMX,17,		TIMEOUT INTERVAL IN SECONDS

XXP	TELWRD,			TELNET CONTROL STUFF
	XX IACFLG,1B0,		CURRENTLY INTERPRETING COMMAND (MUST BE SIGN)
	XX LSGAFG,1B1,		LOCAL SUPPRESS-GA OPTION IN EFFECT
	XX FSGAFG,1B2,		FOREIGN SUPPRESS-GA OPTION IN EFFECT
	XX INSWAT,1B3,		HAVE DATA MARK--WAITING FOR INS
	XX SYNCLR,1B4,		CLEAR TTY OUTPUT BUFFER ON SYNCH
	XX INSCNT,17B9,		RECEIVED INS COUNTER FIELD
	DEFINE PINSCT<PINSCT::	POINT 4,TELWRD(F),9>
	XX OPTCHR,377B17,	TELNET OPTION CHARACTER BEING PROCESSED
	DEFINE PTLNOP<PTLNOP::	POINT 8,TELWRD(F),17>
	;BITS 18-35 ARE FOR THE TELNET COROUTINE LINKAGE
XXP	ECPEND,			NO. OF ECHO NEGOTIATION REPLIES PENDING
XXP	TELOWD,			FOR TELNET OUTPUT CODE AND MORE BITS
	XX XPTECH,1B1,		EXPECTING REPLY TO ECHO NEGOTIATION
	XX XPTSGA,1B2,		EXPECTING REPLY TO SUPRESS GA NEGOTIATION
	XX LLCPWN,1B3,		FLAG TO PERMIT TOTAL ECHO SUPRESSION
	XX IECHO,1B4,		BIT SET BY TALK IMPUUO - DISALLOWS SERVER ECHOING
	XX TELOMR,1B5,		TELNET OUTPUT COROUTINE HAS MORE TO SAY
	DEFINE PTOFNC<PTOFNC::	POINT 8,TELOWD(F),17>
	;BITS 18-35 ARE TELNET OUTPUT COROUTINE ADDRESS
XXP	ICLEAR,			CLEAR FROM HERE TO WIPE INPUT
XXX	IALBIT,			NUMBER OF BITS ALLOCATED TO SENDER
XXP	IALMES,			NUMBER OF MESSAGES ALLOCATED TO SENDER
XXP	ISKLCL,			MY RECEIVE SOCKET
XXP	ISKRMT,			HIS SEND SOCKET
XXP	ISTAT,<			STATE, STATUS OF INPUT SOCKET>
	DEFINE PIALMS<PIALMS:	POINT 6,ISTAT(F),5> ;DESIRED MSG ALLOCATION
	DEFINE PIALBT<PIALBT::	POINT 16,ISTAT(F),21> ;DESIRED BIT ALLOCATION
	DEFINE PIBYTE<PIBYTE::	POINT 8,ISTAT(F),29>
	DEFINE PISTAT<PISTAT::	POINT 6,ISTAT(F),35>
xxm	irfcq,3,		[96bit] rfc queue for input socket
	xx .rqhst,0,		[96bit] host number offset for rfc queue
	xx .rqbyt,1,		[96bit] byte size
	xx .rqsoc,2,		[96bit] socket number
XXP	IBFWD,			TOP OF AREA USED BY NCP INPUT
xxx	ileadr,			[96bit] host/link from last leader
	DEFINE PIHOST<PIHOST::	POINT .szhst,ILEADR(F),35 - .szlnk>
	DEFINE PILINK<PILINK::	POINT .szlnk,ILEADR(F),35>
XXP	IBFTHS,			ADDRESS OF BUFFER CURRENTLY BEING EMPTIED
XXP	IBFLST,			ADDRESS OF LAST BUFFER IN STREAM
XXP	IBFPNT,			ADDRESS OF LAST WORD PLACED IN BUFFER
XXP	IBFPC,			ADDRESS OF NEXT BYTE INPUT ROUTINE
XXP	IBFBC,			COUNT OF BITS LEFT IN THE BUFFER
XXP	IBFBIT,			COUNT OF BITS INPUT BUT NOT REALLOCATED
XXP	IBFMES,			SAME FOR MESSAGE COUNT
XX	IBFWDS,..XX-IBFWD+1,	SIZE OF AREA USED BY NCP FOR INPUT
XXX	ICLEND,			STOP CLEARING HERE WHEN WIPING INPUT
XXP	ISHREG,			TEMP DATA STORAGE FOR ASSEMBLING A WORD
XXP	USRPAR,			ARBITRARY USER-DEFINED CONNECTION PARAMETERS

XXS	IMPDDS,			LENGTH OF IMP DDB
;SOME MACROS

	PI==	4	;ELSE MACRO WON'T ASSIGN VALUE UNTIL PASS 2

;(701: use ScnOff)	DEFINE NOINTERRUPT <CONO PI,PI.TFP+IMPBTS##>
;(701: use ScnOn)	DEFINE INTERRUPT <CONO PI,PI.TNP+IMPBTS##>

;MACRO TO CHECK FOR IMP INTERRUPT CHANNEL TURNED OFF AND HALT IF NOT.
;   USE AT THE START OF CRITICAL ROUTINES THAT MUST BE CALLED WITH
;   INTERRUPTS OFF.
DEFINE CHKINT <
IFN DEBUG,<
	CONSZ	PI,IMPBTS##	;SKIP IF IMP CHANNEL OFF
	JSR	INDERR		;HALT IF NOT
>>


;SOME TABLE BUILDING MACROS:

DEFINE ENTRI(A)<
IFE ..N&1,<
	DEFINE ..XWD(B)<
	A	,,	B
>>
IFN ..N&1,<
	..XWD A
	DEFINE ..XWD(B)<>
>
..N==..N+1
>
DEFINE TABLE<
	..N==0
	DEFINE ..XWD(B)<>
>
DEFINE TABEND(A)<
	IFNB <A>,<..XWD A>
	IFB <A>,<..XWD 0>
>
;OTHER PARAMETERS

XX	NCPLNK,0,		LINK DEDICATED TO NCP
XX	NCPBYT,↑D8,		BYTE SIZE ON NCP CONNECTION
XX	LNKMIN,↑D2,		SMALLEST LEGAL DATA LINK
XX	LNKMAX,↑D71,		LARGEST LEGAL DATA LINK
XX	LNKXP1,↑D192,		FIRST EXPERIMENTAL LINK NUMBER
XX	LNKXP2,↑D255,		LAST EXPERIMENTAL LINK NUMBER
XX	im.pri,1b32,		[96bit] PRIORITY BIT (HOST-IMP MESSAGES)
XX	im.trc,1b20,		[96bit] TRACE BIT
XX	im.oct,1b21,		[96bit] OCTAL BIT
XX	UBUFL,↑D128,		USER BUFFER SIZE
XX	ICPBYT,↑D32,		BYTE SIZE FOR ICP
XX	ICPDAT,↑D32,		MINIMUM ALLOCATION FOR ICP
XX	HS.TIK,↑D60,		INTERVAL ON WHICH TO CHECK EACH HOST

XX	.ALBTL,↑D80*↑D8,	TELNET BIT ALLOCATION
XX	.ALMSL,↑D80,		TELNET MESSAGE ALLOCATION
XX	.ALBTD,↑D32000,		BINARY BIT ALLOCATION
XX	.ALMSD,↑D16,		BINARY MESSAGE ALLOCATION
XX	.ALBTS,↑D500,		STARTUP BIT ALLOCATION
XX	.ALMSS,1,		STARTUP MESSAGE ALLOCATION
XX	.ALBTX,↑D32000,		MAXIMUM BIT ALLOCATION
XX	.ALMSX,↑D80,		MAXIMUM MESSAGE ALLOCATION

COMMENT \
WORST CASE BUFFER REQUIREMENTS PER SOCKET ARE
(B + 108)/S + M + 1 FOR INPUT AND 8024/S FOR
OUTPUT,   WHERE B IS THE BIT ALLOCATION, S IS
THE BUFFER SIZE IN BITS, AND M IS THE MESSAGE
ALLOCATION.
\

XX	ICPMAX,↑D255,		HIGHEST LEGAL ICP SOCKET NUMBER
XX	FREMIN,1000400,		FIRST SOCKET IN FREE SOCKET POOL
XX	FRELSH,9,		SHIFTS TO PUT GENERATOR NUMBER INTO SOCKET
XX	FREMSK,777,		MASK FOR GENERATOR NUMBER
;TELETYPE STUFF
XX	.CHETX,"C"&↑O37,	↑C (ETX) PDP-10 ESCAPE
XX	.CHCNO,"O"&↑O37,	↑O SUPRESSES OUTPUT
XX	.CHDLE,"N"&↑O37,	↑N QUOTES NEXT CHARACTER
XX	.CHCNC,"←"&↑O37,	↑← (US) IS LOCAL ESCAPE CHARACTER
XX	.CHESC,"↑"&↑O37,	↑↑ (RS) IS NETWORK ESCAPE CHARACTER
XX	.CHLF,↑O12,		LINE FEED
XX	.CHCR,↑O15,		CARRAIGE RETURN
XX	.CHEOL,.CHLF,		LINE FEED IS STANDARD END OF LINE

;TELNET PROTOCOL STUFF
	.TNIAC==:↑D255		;INTERPRET FOLLOWING AS COMMAND
	.TNSE==↑D241		;END SUBNEGOTIATION PARAMETERS

	.TNNOP==↑D241		;NO-OP
	.TNDM==	↑D242		;DATA MARK
	.TNBRK==↑D243		;BREAK (OR REVERSE BREAK)
	.TNIP==	↑D244		;INTERRUPT PROCESS
	.TNAO==:↑D245		;ABORT OUTPUT
	.TNAYT==↑D246		;ARE YOU THERE
	.TNEC==	↑D247		;ERASE CHARACTER
	.TNEL==	↑D248		;ERASE LINE
	.TNGA==	↑D249		;GO AHEAD
	.TNSB==	↑D250		;SUB-NEGOTIATE
	.TNWIL==:↑D251		;WILL
	.TNWNT==:↑D252		;WON'T
	.TNDO==	↑D253		;DO
	.TNDNT==↑D254		;DON'T

	.TOBIN==0		;TRANSMIT BINARY OPTION
	.TOECH==:1		;ECHO OPTION
	.TORCP==2		;RECONNECTION PROTOCOL OPTION
	.TOSGA==3		;SUPPRESS GO-AHEAD OPTION
	.TOAMS==4		;APPROXIMATE MESSAGE SIZE OPTION
	.TOSTT==5		;STATUS OPTION
	.TOTIM==6		;TIMING MARK OPTION
	.TORCT==7		;REMOTE CONT. TRANS AND ECHOING
	.TOXOL==↑D255		;EXTENDED OPTIONS LIST OPTION

;STILL MORE
XX	ERRMAX,↑D15,		MAXIMUM NUMBER OF COUNTED ERROR MESSAGES
xx	impmax,↑d8159,		[96bit] abs. max. message size for imp
xx	maxmes,impmax-<.szimp+.szncp>,	[96bit] max. size available
XX	MRKFLG,↑O400000,	FLAG TO SIGNAL FIRST BUFFER OF A MESSAGE
XX	PADFLG,↑O200000,	FLAG TO SIGNAL LAST BUFFER OF A MESSAGE

xx	mesdln,↑d16,	[96bit] space for imp-host message type
			;	counts in gettab tables
			;	must be at least as big as
			;	MESDSP in IMPSER

;[96bit] new format imp header has the first 20 bits constant.
xx	newfrm,↑d15b7,		[96bit] decimal 15 in second 4 bit byte

	end		;(236) universal files have "END"s